var usersDAO = require('../models/usersDAO')
var formidable = require('formidable')
var path = require('path')
var bcrypt = require('bcrypt')
var jwt = require('jsonwebtoken')
var usersController = {
    //获取某个用户所有信息
    getUserById: function (req, res) {
        console.log("hahah:"+req.user)
        usersDAO.getUserById(req.user, function (err, results) {
            if (err) {
                res.json({ code: 500, msg: '用户信息查询失败！' })
            } else {
                if (results.length > 0) {
                    res.json({ code: 200, data: results, msg: '用户查询成功' })
                } else {
                    res.json({ code: 200, data: results, msg: '用户信息查无此人！' })
                }
            }
        })
    },

    //注册
    register: function (req, res) {
        //接收用户请求传入的参数，并创建用户对象
        var user = { phone: req.body.phone, userPassword: req.body.userPassword }
        if(user.phone.length!=11){
            res.json({ code: 500,data:0, msg: '用户电话号码不是11位！' }) 
        }else{
            if(user.userPassword.length==0){
                res.json({ code: 500,data:0, msg: '用户密码输入为空！' })
            }else{
                bcrypt.genSalt(10, function (err, salt) {
                    bcrypt.hash(user.userPassword, salt, function (err, hash) {
                        //hash是加密后的字符
                        user.userPassword = hash
                        usersDAO.register(user, function (err, results) {
                            if (err) {
                                res.json({ code: 500, data:0, msg: '已存在相同的用户或数据库错误!' })
                                // res.status(500).json({ msg: '已存在相同的用户或数据库错误!' })
                            } else {
                                res.json({ code: 200, data: results.affectedRows, msg: '注册成功!' })
                                // res.status(200).json({ msg: '注册成功!' })
        
                            }
                        })
                    })
                })
            }
        }
        // console.log(user)
        // bcrypt.genSalt(10, function (err, salt) {
        //     bcrypt.hash(user.userPassword, salt, function (err, hash) {
        //         //hash是加密后的字符
        //         user.userPassword = hash
        //         //判断是否有相同的手机号?
        //         usersDAO.register(user, function (err, results) {
        //             if (err) {
        //                 res.status(500).json({ msg: '数据库错误，已存在相同的用户，注册失败!' })
        //             } else {
        //                 if (user.phone.length != 11) {
        //                     res.status(200).json({ msg: '用户长度必须为11位' })
        //                 } else {
        //                     res.status(200).json({ msg: '注册成功!' })
        //                 }

        //             }
        //         })
        //     })
        // })
    },
    //登录
    login: function (req, res) {
        //接收用户请求传入的参数，并创建用户对象
        var user = { phone: req.body.phone, userPassword: req.body.userPassword }
        console.log(user)
        usersDAO.getUserPhone(user.phone, function (err, results) {
            if (err) {
                res.status(500).json({ msg: '数据库错误，登录失败！' })
            } else {
                if (results == null || results.length != 1) {
                    res.status(200).json({ msg: '手机号不存在，登录失败！' })
                } else {
                    bcrypt.compare(user.userPassword, results[0].userPassword, function (err, resPwd) {
                        if (resPwd) {
                            //记录登录成功后的token
                            jwt.sign({ phone: user.phone }, 'privateKey', { expiresIn: 60 * 60 }, function (err, token) {
                                console.log(token);
                                //注意token的固定格式"Bearer"前缀
                                res.status(200).json({ msg: '登录成功！', token: 'Bearer ' + token })
                            });

                        } else {
                            res.status(200).json({ msg: '密码错误登录失败! ' })
                        }
                    })
                }
            }
        })
    },

    //修改密码
    changePassword: function (req, res) {
        var oldPassword = req.body.oldPassword
        var userPassword=req.body.newPassword
        usersDAO.getUserPassword(req.user, function (err, pwd) {
            if (err) {
                res.json({ code: 500, msg: '用户密码查询数据库错误！' })
            } else {
                // console.log(pwd[0].userPassword)
                bcrypt.compare(oldPassword, pwd[0].userPassword, function (err, resPwd) {
                    if (resPwd) {
                        //对修改的密码加密
                        bcrypt.genSalt(10, function (err, salt) {
                            bcrypt.hash(userPassword, salt, function (err, hash) {
                                //hash是加密后的字符
                                userPassword = hash
                                usersDAO.changePassword({ userPassword: userPassword,loginuser:req.user }, function (err, results) {
                                    if (err) {
                                        res.json({ code: 500, msg: '修改密码失败！' })
                                    } else {
                                        res.json({code:200,data:results.affectedRows,msg:'修改密码成功！'})
                                    }
                                })
                            })
                        })
                    } else {
                        res.status(200).json({ data:resPwd,msg: '输入密码跟原密码不同' })
                    }
                })

            }
        })
    },

    //修改用户名
    changeUsername:function(req,res){
        var user={loginuser:req.user,userName:req.body.userName}
        usersDAO.changeUsername(user,function(err,results){
            if (err) {
                res.json({ code: 500, msg: '用户信息查询失败！' })
            } else {
                if (results.affectedRows==1) {
                    res.json({ code: 200, data: results.affectedRows, msg: '修改用户名成功' })
                } else {
                    res.json({ code: 200, data: results.affectedRows, msg: '无此用户，修改用户名失败！' })
                }
            }
        })
    },

    //上传头像
    uploadPic: function (req, res) {
        var form = new formidable.IncomingForm();   //创建上传表单对象
        form.uploadDir = path.join(__dirname, '..', '/public/upload');   //设置上传文件的路径
        form.keepExtensions = true   //设置保留上传文件的扩展名
        form.parse(req, function (err, fields, files) {   //实现上传文件和字段的转换
            if (err) {
                res.send('文件上传错误！')
            }
            //fields是上传的表单字段数组，files是上传的文件列表
            //保存图片路径到数据库
            //1.获取当前用户编号
            console.log(fields)
            //2.获取当前用户的图片名称
            console.log('图片',files.headPic)
            var headPic = path.parse(files.headPic.path).base
            usersDAO.upload({ headPic: headPic, loginuser:req.user}, function (err, results) {
                if (err) {
                    res.json({ code: 500, msg: '上传文件数据库错误！' })
                } else {
                    if(results.affectedRows==0){
                        res.json({ code: 200, data: results.affectedRows, msg: '上传文件失败！' })
                    }
                    res.json({ code: 200, data: results.affectedRows, msg: '上传文件成功！' })
                }
            })
        })
    },
    //增加积分数
    addintegral: function (req, res) {
        usersDAO.addintegral(req.user, function (err, results) {
            if (err) {
                res.json({ code: 500, msg: '积分数查询数据库错误！' })
            } else {
                if (results.affectedRows == 0) {
                    res.json({ code: 200, data: results.affectedRows, msg: '积分数增加失败！' })
                } else {
                    res.json({ code: 200,data: results.affectedRows, msg: '积分增加成功！' })
                }
            }
        })
    },
    //兑换积分
    subintegral:function(req,res){
        var shopId=req.body.shopId
        //查看积分数
        usersDAO.lookgenitegral(shopId,function(err,results){
            if(err){
                res.json({code:500,msg:'查询积分数数据库错误！'})
            }else{
                console.log("积分商城"+results[0].getintegral)
                //查看用户积分数
                usersDAO.userintegral(req.user,function(err,userresults){
                    if(err){
                        res.json({code:500,msg:'查询用户数据库错误！'})
                    }else{
                        console.log("用户个人积分"+userresults[0].integral)
                        // res.json({code:200,data:userresults,msg:'查询用户积分兑换成功！'})
                        if(results[0].getintegral<userresults[0].integral){
                            // res.send("可以兑换")
                            //用户积分数减少
                            usersDAO.subuserintegral(results[0].getintegral,userresults[0].integral,req.user,function(err,results){
                                if(err){
                                    res.json({code:500,msg:'兑换积分数据库错误！'})
                                }else{
                                    // res.json({code:200,msg:'兑换积分数成功！'})
                                    //增加兑换记录
                                    usersDAO.addexchange(req.user,shopId,function(err,exchangeresults){
                                        if(err){
                                            res.json({code:500,msg:'增加兑换记录数据库失败！'})
                                        }else{
                                            res.json({code:200,data:exchangeresults.affectedRows,msg:'增加兑换记录成功！'})
                                        }
                                    })
                                }
                            })
                        }else{
                            res.json({ code: 200, data: 0,msg:'积分数不够，不可以兑换!'})
                        }
                    }
                })
                // res.json({code:200,data:results,msg:'查询积分数成功！'})
            }
        })
    }
}
module.exports = usersController